package cz.vse.adventura.po1715.xkosd00_kostka.hra;

import java.util.Collection;
import static cz.vse.adventura.po1715.xkosd00_kostka.hra.Texty.*;


/*******************************************************************************
 * Instance třídy {@code PrikazStiskni} představují příkazy sloužící
 * ke stisknutí předmětu.
 * @author    Dominik KOSTKA
 * @version   1.0
 */
public class PrikazStiskni extends APrikaz
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================


    
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     *
     */
    public PrikazStiskni()
    {
        super( pSTISKNI,
               "Stiskne zadaný objekt.\n" +
               "Tento objekt musí patřit mezi stisknutelné." );
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Stiskne zadaný objekt. Nejdříve zkontroluje, zda byl zadán předmět, pak
     * jestli je předmět vypínač v 1. nebo 2. patře a zda je zadaný objekt
     * v aktuální místnosti. Následně objekt stiskne a
     * nastaví status světla v daném patře na opak předchozího.
     * @param parametry Vypínač v 1. nebo 2.patře
     * @return Text zpravy vypsane po provedeni prikazu
     */
    @Override
    public String execute( String... parametry )
    {
        if (parametry.length == 0) return zCIL_NEZADAN;

        String název = parametry[0];

        if (!název.equalsIgnoreCase(VYPÍNAČ1) &&
            !název.equalsIgnoreCase(VYPÍNAČ2))
                return NELZE_STISKNOUT + název;
        
        Mistnost am = Mistnost.getAktuálníMístnost();
        Collection<Predmet> předměty = am.getObjects();
        boolean jePředmět = false;

        for (Predmet p : předměty) {
            String pr = p.getName();
            if (název.equalsIgnoreCase(pr)){
                jePředmět = true;
            }
        }

        if(!jePředmět) return zNENÍ_PŘEDMĚT + název;
        
        String stav = " vypnuta.";
        
        if(am == Mistnost.Patro1){
            Stav.světla1Svítí = !Stav.světla1Svítí;
        }else{
            Stav.světla2Svítí = !Stav.světla2Svítí;
        }

        if(Stav.světla1Svítí || Stav.světla2Svítí) stav = " zapnuta.";

        return SVĚTLA + am + " jsou" + stav;
    }

//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTOVACÍ METODY A TŘÍDY ==================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        PrikazStiskni inst = new PrikazStiskni();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
